iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0
Rust

用 Tauri 打造你的應用程式系列 第 23

[Day 23] Plugin (五):Logging

  • 分享至 

  • xImage
  •  

在軟體開發的世界中,日誌就像是應用程式的「黑盒子」,記錄著程式運行的每一個重要時刻。特別是在跨平台應用中,完善的日誌系統不僅是除錯的利器,更是了解使用者行為、監控應用程式健康狀態的重要工具。今天我們將深入探討如何在 Tauri 2.0 中建立一套專業的日誌記錄系統。

為何日誌如此重要?

在桌面應用程式的開發過程中,開發者往往專注於功能實作,而忽略了日誌的重要性。然而,當應用程式發布到生產環境後,日誌就成了開發者與使用者之間溝通的重要橋樑。透過日誌,我們可以:

  • 快速定位問題:當使用者回報錯誤時,詳細的日誌能幫助開發者快速重現和解決問題
  • 監控效能狀況:追蹤應用程式的執行效能,及早發現潛在的效能瓶頸
  • 分析使用行為:了解使用者如何使用應用程式,為產品優化提供數據支援

Tauri 2.0 日誌插件安裝

Tauri 2.0 採用了全新的插件系統,安裝日誌功能變得更加簡單。只需在專案根目錄執行:

npm run tauri add log

這個命令會自動完成所有必要的設定,包括在 Cargo.toml 中加入依賴,在 main.rs 中初始化插件,以及在權限檔案中加入必要的權限設定。

Rust 後端日誌設定

src-tauri/src/main.rs 中,插件會自動加入初始化代碼:

fn main() {
    tauri::Builder::default()
        .plugin(tauri_plugin_log::Builder::new().build())
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

在你的 Command 函式中,就可以開始使用日誌了:

#[tauri::command]
fn process_data(data: String) -> Result<String, String> {
    log::info!("開始處理資料: {}", data);
    
    // 處理邏輯
    if data.is_empty() {
        log::warn!("收到空白資料");
        return Err("資料不能為空".to_string());
    }
    
    log::debug!("資料處理完成,長度: {}", data.len());
    Ok(format!("處理完成: {}", data))
}

會在 terminal 看到這樣輸出:

[2025-10-07][14:49:45][ithome_ironman_2025_tauri_lib][INFO] 開始處理資料: 
[2025-10-07][14:49:45][ithome_ironman_2025_tauri_lib][WARN] 收到空白資料

前端日誌整合

在 JavaScript 前端中,你可以使用 @tauri-apps/plugin-log 的前端 API:

import { info, warn, error } from '@tauri-apps/plugin-log';

const testLog = async () => {
  await info('使用者點擊了測試按鈕');
  
  try {
    // 一些可能失敗的操作
    throw new Error('模擬錯誤');
  } catch (err) {
    await error(`發生錯誤: ${err.message}`);
  }
};

會在 terminal 看到這樣輸出:

[2025-10-07][14:52:05][webview:testLog@http://localhost:1420/src/views/MainView.vue?t=1759848725346:18:13][INFO] 使用者點擊了測試按鈕
[2025-10-07][14:52:05][webview:testLog@http://localhost:1420/src/views/MainView.vue?t=1759848725346:22:15][ERROR] 發生錯誤: 模擬錯誤

跨平台日誌檔案位置

Tauri 會根據不同作業系統,將日誌檔案儲存在適當的位置:

  • Windows%LOCALAPPDATA%\{bundleIdentifier}\logs\
  • macOS/iOS~/Library/Logs/{bundleIdentifier}\
  • Linux~/.local/share/{bundleIdentifier}/logs/
  • Android/data/data/{bundleIdentifier}/files/logs/

不論是測試或是安裝後執行,都是存在這個位置。

日誌設定

調整時區

如果大家剛剛有仔細看 Log 內容的話,會發現他有紀錄日期時間。預設是使用 UTC 時區 (所以並不是我在白天上班寫文章),如果想改用 local 時區的話可以這樣設定:

tauri_plugin_log::Builder::new()
  .timezone_strategy(tauri_plugin_log::TimezoneStrategy::UseLocal)
  .build()

日誌格式

預設格式是 DATE[TARGET][LEVEL] MESSAGE,可以使用 format 來調整格式,例如:

use chrono::Local;

tauri_plugin_log::Builder::new()
  .format(|out, message, record| {
    let now = Local::now();
    out.finish(format_args!(
    "{} | {} | {}:{} | {}",
    now.format("%Y-%m-%d %H:%M:%S%.3f"),
    record.level(),
    record.target(),
    record.line().unwrap_or_default(),
    message
    ))
  })
  .build()

日誌就變成這個樣子了:

2025-10-07 23:17:31.598 | INFO | ithome_ironman_2025_tauri_lib:8 | 開始處理資料: 王大明
2025-10-07 23:17:31.598 | DEBUG | ithome_ironman_2025_tauri_lib:16 | 資料處理完成,長度: 9

調整 Log Level

有時候,在不同情況下需要使用不同的 Log Level,如果不想要記錄低於 INFO 層級的日誌的話,可以這樣設定:

tauri_plugin_log::Builder::new()
  .level(log::LevelFilter::Info)
  .build()

開發與生產環境的差異

在開發模式下,日誌會同時輸出到終端機和檔案,方便即時查看。而在生產環境中,日誌主要寫入檔案,並可以設定不同的日誌等級來控制輸出的詳細程度。

小結

今天我們深入了解了 Tauri 2.0 的日誌系統,主要學習了以下幾個重點:

  1. 簡單安裝:透過 npm run tauri add log 一鍵安裝日誌插件
  2. 雙端整合:同時支援 Rust 後端 (log::info!) 和 JavaScript 前端 (info()) 日誌記錄
  3. 跨平台支援:自動處理不同作業系統的日誌檔案位置
  4. 彈性設定:可調整時區、格式、日誌等級等設定

完善的日誌系統是專業應用程式不可或缺的一部分。Tauri 2.0 的日誌插件提供了簡單易用且功能強大的日誌解決方案,讓開發者能夠輕鬆實作從開發到生產的完整日誌記錄。透過合理使用日誌,我們不僅能提高開發效率,更能提升應用程式的可維護性和使用者體驗。


上一篇
[Day 22] Android 打包
下一篇
[Day 24] Plugin (六):Deep Link
系列文
用 Tauri 打造你的應用程式24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言